static int setup_device(struct xenbus_device *, struct netfront_info *);
static struct net_device *create_netdev(struct xenbus_device *);
-static void netfront_closing(struct xenbus_device *);
-
static void end_access(int, void *);
static void netif_disconnect_backend(struct netfront_info *);
-static int open_netdev(struct netfront_info *);
-static void close_netdev(struct netfront_info *);
static int network_connect(struct net_device *);
static void network_tx_buf_gc(struct net_device *);
info = netdev_priv(netdev);
dev->dev.driver_data = info;
- err = open_netdev(info);
- if (err)
+ err = register_netdev(info->netdev);
+ if (err) {
+ printk(KERN_WARNING "%s: register_netdev err=%d\n",
+ __FUNCTION__, err);
+ goto fail;
+ }
+
+ err = xennet_sysfs_addif(info->netdev);
+ if (err) {
+ unregister_netdev(info->netdev);
+ printk(KERN_WARNING "%s: add sysfs failed err=%d\n",
+ __FUNCTION__, err);
goto fail;
+ }
return 0;
return err;
}
+static int __devexit netfront_remove(struct xenbus_device *dev)
+{
+ struct netfront_info *info = dev->dev.driver_data;
+
+ DPRINTK("%s\n", dev->nodename);
+
+ netif_disconnect_backend(info);
+
+ del_timer_sync(&info->rx_refill_timer);
+
+ xennet_sysfs_delif(info->netdev);
+
+ unregister_netdev(info->netdev);
+
+ free_netdev(info->netdev);
+
+ return 0;
+}
/**
* We are reconnecting to the backend, due to a suspend/resume, or a backend
break;
case XenbusStateClosing:
- if (dev->state == XenbusStateClosed)
- break;
- netfront_closing(dev);
+ xenbus_frontend_closed(dev);
break;
}
}
}
-/* ** Close down ** */
-
-
-/**
- * Handle the change of state of the backend to Closing. We must delete our
- * device-layer structures now, to ensure that writes are flushed through to
- * the backend. Once is this done, we can switch to Closed in
- * acknowledgement.
- */
-static void netfront_closing(struct xenbus_device *dev)
-{
- struct netfront_info *info = dev->dev.driver_data;
-
- DPRINTK("%s\n", dev->nodename);
-
- close_netdev(info);
- xenbus_frontend_closed(dev);
-}
-
-
-static int __devexit netfront_remove(struct xenbus_device *dev)
-{
- struct netfront_info *info = dev->dev.driver_data;
-
- DPRINTK("%s\n", dev->nodename);
-
- netif_disconnect_backend(info);
- free_netdev(info->netdev);
-
- return 0;
-}
-
-
-static int open_netdev(struct netfront_info *info)
-{
- int err;
-
- err = register_netdev(info->netdev);
- if (err) {
- printk(KERN_WARNING "%s: register_netdev err=%d\n",
- __FUNCTION__, err);
- return err;
- }
-
- err = xennet_sysfs_addif(info->netdev);
- if (err) {
- unregister_netdev(info->netdev);
- printk(KERN_WARNING "%s: add sysfs failed err=%d\n",
- __FUNCTION__, err);
- return err;
- }
-
- return 0;
-}
-
-static void close_netdev(struct netfront_info *info)
-{
- del_timer_sync(&info->rx_refill_timer);
-
- xennet_sysfs_delif(info->netdev);
- unregister_netdev(info->netdev);
-}
-
-
static void netif_disconnect_backend(struct netfront_info *info)
{
/* Stop old i/f to prevent errors whilst we rebuild the state. */